// 引入模块
const Koa = require('koa'),
    // 路由管理
    router = require('koa-router')(),
    // 引入模版引擎
    render = require('koa-art-template'),
    // 引入路径
    path = require('path'),
    // 引入静态资源
    static = require('koa-static'),
// 导入user路由组件
    admin = require('./routers/admin'),
    //引入koa-body接受前端的参数
    koaBody = require('koa-body'),
    // 引入session，进行存取  存的是在cookies中，只存取键
    session = require('koa-session');


const app = new Koa();

// 使用中间件


// 配置静态资源的路径，默认为static的文件夹作为根目录
app.use(static('static'));

// 配置koa-body接受前端的请求体数据
app.use(koaBody({
    multipart: true
}));

// 配置session    cooklie中的key值
app.keys = ['some secret hurr'];

const CONFIG = {
    key: 'koa.sess', /** (string) cookie key (default is koa.sess) */
    /** (number || 'session') maxAge in ms (default is 1 days) */
    /** 'session' will result in a cookie that expires when session/browser is closed */
      /** Warning: If a session cookie is stolen, this cookie will never expire */
      // 默认有效期1天
    maxAge: 86400000,
  
    autoCommit: true, /** (boolean) automatically commit headers (default true) */
  //     能不能写
    overwrite: true, /** (boolean) can overwrite or not (default true) */
  //   cookie是否只有服务端可以访问
    httpOnly: true, /** (boolean) httpOnly or not (default true) */
  //   签名
    signed: true, /** (boolean) signed or not (default true) */
  //   
    rolling: false, /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
  //是否可以覆盖，到期前进行访问，更新到期时间
    renew: false, /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
  //   使用https进行访问 ，需要改成http改成false
    secure: false, /** (boolean) secure cookie*/
    sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
  };
  
  app.use(session(CONFIG, app));
  // or if you prefer all default config, just use => app.use(session(app));
  


// 配置art-template  所有模板文件放入view下
render(app, {
    root: path.join(__dirname, 'view'),
    extname: '.html',
    debug: process.env.NODE_ENV !== 'production'
});

// 配置404 
app.use(async (ctx, next) => {
    await next();
    if (ctx.status === 404) {
        console.log(ctx.status);
        ctx.body = "抱歉，页面不存在"   
    }
})

// 存session
router.get('/setsession', ctx => {
    ctx.body = 'session 设置成功';
    ctx.session.title = 'mytitle';
    ctx.session.name = 'james';
    ctx.session.status = '1';
})

//取session
router.get('/getsession', ctx => {
    let title = ctx.session.title;
    let { name, status } = ctx.session;
    ctx.body = title;
    console.log(name,status);
})

// 销毁session
router.get('/destroysession', ctx => {
  
    // 销毁所有  //false null ''
    ctx.session = null;
    ctx.body = 'session销毁成功';

})


// 引入view下的user.html作为路由的显示界面 
router.use('/admin', admin);

// 添加登录界面路由
router.get("/login", ctx => {
    ctx.render('login');
})
// 验证登录
router.post('/logindo', ctx => {
    let { username, pwd } = ctx.request.body;
    ctx.body = username + pwd;
    // 验证数据库
    if (username && pwd) {
        if (username == 'james' && pwd == '12345') {
            // 创建session
            ctx.session.login = username;
            // 跳转到后台管理系统
            ctx.redirect('/admin');
        } else {
            ctx.body='登录失败'
        }
    } else {
        ctx.body="请输入用户名和密码"
    }
})


// 配置路由（建议写在开启服务器的前面）
app
    .use(router.routes())
    .use(router.allowedMethods());


// 开启服务器
app.listen(3000, () => {
    console.log('服务器运行再http://localhost:3000');
});